package utilities;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created with IntelliJ IDEA.
 * User: Jordi
 * Date: 29/12/12
 * Time: 19:01
 * To change this template use File | Settings | File Templates.
 */
public class ConversorTipusMySQL implements Serializable,ConversorTipus {

    protected transient ResultSet resultSet;
    public ConversorTipusMySQL() {
    }
    public ConversorTipusMySQL(ResultSet resultSet) {
        setResultSet(resultSet);
    }
    @Override
    public Object[] convertir(String campNomClasse, String nomColumna) throws SQLException{
        Object valor = null;
        Object[] convertirValor = null;
/**
 * ----Conversor de tipus per MySQL----
 * Cal revisar els tipus utilitzats.
 * S'ha considerat tan sols els més genèrics
 */
        if (campNomClasse == null){
            convertirValor = new Object[1];
            valor = resultSet.getObject(nomColumna);
            convertirValor[0] = valor;
        }else if (campNomClasse.equals("String")){
            convertirValor = new String[1];
            valor = resultSet.getString(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = (String) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("Integer")){
            convertirValor = new Integer[1];
            valor = new Integer(resultSet.getInt(nomColumna));
            if (resultSet.wasNull()){
                convertirValor[0] = (Integer) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("Long")){
            convertirValor = new Long[1];
            valor = new Long(resultSet.getLong(nomColumna));
            if (resultSet.wasNull()){
                convertirValor[0] = (Long) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("Double")){
            convertirValor = new Double[1];
            valor = new Double(resultSet.getDouble(nomColumna));
            if (resultSet.wasNull()){
                convertirValor[0] = (Double) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("Float")){
            convertirValor = new Float[1];
            valor = new Float(resultSet.getFloat(nomColumna));
            if (resultSet.wasNull()){
                convertirValor[0] = (Float) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("Short")){
            convertirValor = new Short[1];
            valor = new Short(resultSet.getShort(nomColumna));
            if (resultSet.wasNull()){
                convertirValor[0] = (Short) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("java.sql.Timestamp")){
            convertirValor = new java.sql.Timestamp[1];
            valor = (java.sql.Timestamp) resultSet.getTimestamp(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = (java.sql.Timestamp) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("java.sql.Time")){
            convertirValor = new java.sql.Time[1];
            valor = (java.sql.Time) resultSet.getTime(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = (java.sql.Time) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("java.sql.Date")){
            convertirValor = new java.sql.Date[1];
            valor = (java.sql.Date) resultSet.getDate(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = (java.sql.Date) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("java.util.Date")){
            convertirValor = new java.util.Date[1];
            java.sql.Date fecha = resultSet.getDate(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = (java.util.Date) null;
            }else{
                valor = new java.util.Date(fecha.getTime());
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("java.math.BigDecimal")){
            convertirValor = new java.math.BigDecimal[1];
            valor = resultSet.getBigDecimal(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = (java.math.BigDecimal) null;
            }else{
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("java.math.BigInteger")){
            convertirValor = new java.math.BigInteger[1];
            long valorLong = 0;
            valorLong = resultSet.getLong(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = (java.math.BigInteger) null;
            }else{
                valor = java.math.BigInteger.valueOf(valorLong);
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("boolean")){
            convertirValor = new Boolean[1];
            boolean valorBoolean = false;
            valorBoolean = resultSet.getBoolean(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = new Boolean(false);
            }else{
                valor = new Boolean(valorBoolean);
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("byte")){
            convertirValor = new Byte[1];
            byte valorByte = 0;
            valorByte = resultSet.getByte(nomColumna);
            if (resultSet.wasNull()){
                byte byteVacio = 0;
                convertirValor[0] = new Byte(byteVacio);
            }else{
                valor = new Byte(valorByte);
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("char")){
            convertirValor = new Character[1];
            String valorString = null;
            valorString = resultSet.getString(nomColumna);
            if (resultSet.wasNull()){
                char charVacio = '\u0000';
                convertirValor[0] = new Character(charVacio);
            }else{
                valor = new Character(valorString.charAt(0));
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("double")){
            convertirValor = new Double[1];
            double valorDouble = 0.0;
            valorDouble = resultSet.getDouble(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = new Double(0.0);
            }else{
                valor = new Double(valorDouble);
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("float")){
            convertirValor = new Float[1];
            float valorFloat = 0;
            valorFloat = resultSet.getFloat(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = new Float(0.0);
            }else{
                valor = new Float(valorFloat);
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("int")){
            convertirValor = new Integer[1];
            int valorInt = 0;
            valorInt = resultSet.getInt(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = new Integer(0);
            }else{
                valor = new Integer(valorInt);
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("long")){
            convertirValor = new Long[1];
            long valorLong = 0;
            valorLong = resultSet.getLong(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = new Long(0);
            }else{
                valor = new Long(valorLong);
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("short")){
            convertirValor = new Short[1];
            short valorShort = 0;
            valorShort = resultSet.getShort(nomColumna);
            if (resultSet.wasNull()){
                short s = 0;
                convertirValor[0] = new Short(s);
            }else{
                valor = new Short(valorShort);
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("Boolean")){
            convertirValor = new Boolean[1];
            boolean valorBoolean = false;
            valorBoolean = resultSet.getBoolean(nomColumna);
            if (resultSet.wasNull()){
                convertirValor[0] = new Boolean(false);
            }else{
                valor = new Boolean(valorBoolean);
                convertirValor[0] = valor;
            }
        }else if (campNomClasse.equals("Character")){
            convertirValor = new Character[1];
            String valorString = null;
            valorString = resultSet.getString(nomColumna);
            if (resultSet.wasNull()){
                char emptyChar = '\u0000';
                convertirValor[0] = new Character(emptyChar);
            }else{
                valor = new Character(valorString.charAt(0));
                convertirValor[0] = valor;
            }
        }else{
            convertirValor = new Object[1];
            valor = resultSet.getObject(nomColumna);
            convertirValor[0] = valor;
        }
        return convertirValor;
    }
    @Override
    public ResultSet getResultSet() {
        return resultSet;
    }
    @Override
    public void setResultSet(ResultSet resultSet) {
        this.resultSet = resultSet;
    }
}
